
package edu.uoc.tdp.servidor.impl.proves;


import edu.uoc.tdp.beans.proves.*;


import edu.uoc.tdp.common.EOlympicsException;
import edu.uoc.tdp.common.EOlympicsExceptionProva;

import edu.uoc.tdp.common.RemotProvesInterface;
import edu.uoc.tdp.bbdd.GestorDiscConnexio;
import edu.uoc.tdp.common.EOlympicsUtils;
import edu.uoc.tdp.servidor.bbdd.proves.*;
import java.io.Serializable;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.text.ParseException;
import java.util.List;




/**
 * Classe que implementa l'interfície RemotProvesInterface
 * 
 * @author Grup TDP 1X4J
 */
public class RemotProvesImpl extends UnicastRemoteObject 
                           implements RemotProvesInterface, Serializable    
{
    
    private static final long serialVersionUID = 1L;
    private GestorDiscConnexio gestorBD;

    /**
     * Constructor de la clase<br>
     * Crea una conexió a la Base de Dades
     * @exception RemoteException
     * @exception EOlympicsException
     */    
    public RemotProvesImpl() throws RemoteException, EOlympicsException {
        super();
        gestorBD = new GestorDiscConnexio();
        gestorBD.obreConnexioBD();
    }

    

    @Override
    public Prova getProva(Integer idProva) throws RemoteException, EOlympicsException {
        Prova prova=null;
        GestorProva gProva= new GestorProva(gestorBD);
        GestorRonda gRonda=new GestorRonda(gestorBD);
       
        prova=gProva.getProva(idProva);        
        if(prova!=null){
    
               
        }        
        return prova;
    }

   
    
    @Override
    public int setProva(Prova prova)throws RemoteException, EOlympicsException,EOlympicsExceptionProva{
        GestorProva gProva= new GestorProva(gestorBD);    
        Integer idProva;        
        idProva=gProva.guardarProva(prova);

        return idProva;
        
    }

   
    @Override
    public List<Prova> getProves(String descripcio, String iniInscripcio, String fiInscripcio, String iniRealitzacio, String fiRealitzacio) throws RemoteException,EOlympicsException,EOlympicsExceptionProva,EOlympicsExceptionProva{
        GestorProva gProva= new GestorProva(gestorBD);
        List<Prova> proves=null;
        if(iniInscripcio.equals("")) iniInscripcio="01/01/2001";
        if(fiInscripcio.equals("")) fiInscripcio="01/01/2090";
        if(fiRealitzacio.equals("")) fiRealitzacio="01/01/2090";
        if(iniRealitzacio.equals("")) iniRealitzacio="01/01/2001";
        try {
            proves = gProva.getProves(descripcio, EOlympicsUtils.getDate(iniInscripcio), EOlympicsUtils.getDate(fiInscripcio), EOlympicsUtils.getDate(iniRealitzacio),EOlympicsUtils.getDate(fiRealitzacio));
        } catch (ParseException ex) {
             System.out.println(ex.getMessage());
            throw new EOlympicsException(EOlympicsException.ERR_DATE);            
        }
        return proves;
    }

    @Override
    public List<Ronda> getRondes(String idProva) throws RemoteException, EOlympicsException, EOlympicsExceptionProva {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public int clearProva(Prova prova) throws RemoteException, EOlympicsException, EOlympicsExceptionProva {
        GestorProva gProva= new GestorProva(gestorBD);
        GestorRonda gRonda=new GestorRonda(gestorBD); 
        Integer idProva;        
        idProva=gProva.setCancelarProva(prova);        
       
        return idProva;
    }

    @Override
    public List<Prova> getProvesPerTancar() throws RemoteException, EOlympicsException, EOlympicsExceptionProva,EOlympicsExceptionProva {
        GestorProva gProva=new GestorProva(gestorBD);        
            return gProva.getProvesPerTancar();
        
    }

    @Override
    public List<Prova> getProvesInscripcions() throws RemoteException, EOlympicsException, EOlympicsExceptionProva, EOlympicsExceptionProva {
        GestorProva gProva=new GestorProva(gestorBD);        
        return gProva.getProvesInscripcions();
    }

    @Override
    public void tancarInscripcio(Prova prova) throws RemoteException, EOlympicsException, EOlympicsExceptionProva, EOlympicsExceptionProva {
        GestorProva gProva=new GestorProva(gestorBD);        
        gProva.tancarInscripcio(prova);
        
    }

    @Override
    public void inscriureDirectaFinal(Prova prova) throws RemoteException, EOlympicsException, EOlympicsExceptionProva, EOlympicsExceptionProva {
        
        GestorParticipacio gParticipacio = new GestorParticipacio(gestorBD);
    }

    @Override
    public void tancarParticipacio(Prova prova, String tipusRonda) throws RemoteException, EOlympicsException, EOlympicsExceptionProva {
        GestorParticipacio gParticipacio = new GestorParticipacio(gestorBD);
        gParticipacio.calcularNotaRonda(prova, tipusRonda);
        
    }

    @Override
    public void inscriureAFinal(Prova prova, String tipusRonda) throws RemoteException, EOlympicsException, EOlympicsExceptionProva {
        GestorProva gProva =new GestorProva(gestorBD);
        gProva.inscriureParticipantsAFinal(prova,tipusRonda);
    }

    
    

    
}
